package com.module.business.service.redis;

import java.util.List;
import java.util.Set;

import org.springframework.data.redis.connection.Message;

/**
 * redisTemplate 
 * @author chenwei
 * @date 2018年3月14日 下午8:04:20
 */
@SuppressWarnings("all")
public interface RedisDao {
	//<T> boolean add(final String key, final T obj);
	/**
	 * 添加字符串类型数据需要设声明周期
	 * 
	 * @author chenwei
	 * @date 2018年11月29日 上午10:16:55
	 * @param key
	 * @param value
	 * @param seconds
	 */
    void add(final String key, final String value, final long seconds);
    /**
     * 添加字符串类型数据永久
     * 
     * @author chenwei
     * @date 2018年11月29日 上午10:16:24
     * @param key
     * @param value
     */
    void add(final String key, final String value);

    <T> void add(final String key, final List<T> list,final long seconds);

    void delete(final String key);

    void delete(final List<String> keys);

    <T> boolean update(final String key,final long seconds, final T obj);

    //boolean update(final String key, final String value);
    boolean update(final String key,final long secends, final String value);
    /**
     * 不存在则更新
     * 
     * @author chenwei
     * @date 2018年3月14日 下午8:07:02
     * @param key
     * @param value
     * @return
     */
    void save(final String key, final String value , final long secends);

    <T> void save(final String key,long secends, final T obj);

    <T> T get(final String key, final Class clazz);

    <T> List<T> getList(final String key, final Class<T> clazz);

    byte[] getByte(final String key);

    String get(final String key);
   
    <T> void add(final String key, final long timeout, final T obj);

    void add(final String key, final long timeout, final byte[] object);

    Set<String> keys(String pattern);

    boolean exist(final String key);

    boolean set(final String key,final byte[] value,final long seconds);
    boolean set(final String key,final String value,final long seconds);

    boolean flushDB();

    long dbSize();
    
    /**
     * 获取订阅消息
     * @author chenWei
     * 2019年1月8日 下午2:52:47
     * @param message redis的message对象
     * @return
     */
    String getMessage(Message message);
    /**
     * 获取订阅消息的主题
     * @author chenWei
     * 2019年1月8日 下午2:56:02
     * @param message redis的message对象
     * @return
     */
    String getTopic(Message message);
    /**
     * 发布主题消息
     * @author chenWei
     * 2019年1月8日 下午2:59:59
     * @param topic 消息主题
     * @param message 消息数据
     * @return
     */
    void sendTopic(String topic,String message);
}
